package com.tom.learnbase.three;


import cn.hutool.core.thread.ThreadUtil;
import com.tom.contants.Contants;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.StreamingResponseHandler;
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.output.Response;
import org.junit.jupiter.api.Test;

/**
 * 流式响应
 * 对于 ChatLanguageModel 和 LanguageModel 接口，有对应的  StreamingChatLanguageModel 和 StreamingLanguageModel 接口。 它们具有类似的API，但可以流式传输响应。 它们接受 StreamingResponseHandler 接口的实现作为参数
 *
 * StreamingChatLanguageModel
 * StreamingLanguageModel
 * StreamingResponseHandler
 */
public class ResponseStreamingTest {


    /**
     * demo 不支持流式
     */
    @Test
    public void test(){
        StreamingChatLanguageModel model = OpenAiStreamingChatModel.builder()
                .baseUrl(Contants.baseUrl)
                .apiKey(Contants.key)
                .build();

        String userMessage = "Tell me a joke";

        model.generate(userMessage, new StreamingResponseHandler<AiMessage>() {

            @Override
            public void onNext(String token) {
                System.out.println("onNext: " + token);
            }

            @Override
            public void onComplete(Response<AiMessage> response) {
                System.out.println("onComplete: " + response);
            }

            @Override
            public void onError(Throwable error) {
                error.printStackTrace();
            }
        });

        ThreadUtil.safeSleep(60*1000L);
    }
}
